package cn.edu.lcvc.ebuy_2023rj2.service;

import cn.edu.lcvc.ebuy_2023rj2.dao.AdminDao;
import cn.edu.lcvc.ebuy_2023rj2.model.Admin;
import cn.edu.lcvc.ebuy_2023rj2.model.common.Pagination;
import cn.edu.lcvc.ebuy_2023rj2.model.exception.MyServiceException;
import cn.edu.lcvc.ebuy_2023rj2.model.query.AdminQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/*
*专门用于处理管理员的业务
*/
@Service   //<====>相当于<bean id="adminService" class="cn.edu.lcvc.ebuy_2023rj4.service.AdminService"/>
public class AdminService {

    @Autowired
    private AdminDao adminDao;

    public AdminService(){
        System.out.println("AdminService初始化对象——创建一个新的对象");
    }
   /*
   * 登录业务
   * @param username  账户名
   * @param password   密码
   * @return   如果密码正确则返回true，反则返回false
    */
//    public boolean login(String username,String password) {
//        boolean result = false;//默认登录失败
//        if (username.equals("Liang") && password.equals("123456")) {
//            result = true;
//        }
//            return result;
//    }
    /*
     * 登录业务
     * @param username  账户名
     * @param password   密码
     * @return   如果密码正确则返回true，反则返回false
     */
    public boolean login(String username,String password) {
        boolean result = false;//默认登录失败
        if(adminDao.countByUsernameAndPassword(username,password)>0){
            result = true;
        }
        return result;
    }


    /**
     *根据账户名在数据库读取指定账户的所有信息
     * @param username
     * @return
     */
    public Admin getAdminByUsername(String username){
        return adminDao.getByUsername(username);
    }

    /**
     * 从数据库Admin表中读取所有记录并返回
     * 说明：如果显示的页面超出范围，则显示最后一页
     * @param  adminQuery
     * @page 指定页码
     * @param pageSize 每页显示几条记录
     * @return 返回管理员记录
     */
    public Pagination getAdmins(AdminQuery adminQuery, Integer page, Integer pageSize){

        //最大页数
        int totalRecords=adminDao.count(adminQuery);//总记录数
    Pagination pagination=new Pagination<Admin>(page,pageSize,totalRecords);
//获取当前页的记录
        pagination.setData(adminDao.find(adminQuery, pagination.getOffset(),pagination.getPageSize()));

        return pagination;
    }

    /**
     * 删除指定记录
     * @param id
     * @return  返回成功删除的记录数
     */
    public int deleteAdmin(Integer id){
        int result=0;
        if (id!=null){
            result=adminDao.deleteById(id);
        }
        return result;
    }

    /**
     * 添加账户
     * @param admin  账户对象  要添加的表单应该都赋值到这个对象
     * @return  添加成功的记录数量
     */
    public int saveAdmin(Admin admin){
        //根据系统业务设置账户初始密码
        int result=0;
        if (admin!=null){//如果传了表单值过来
            admin.setPassword("123456");//设置初始密码
            //如果没有前端没有传递锁定状态的值
            if (admin.getUnLocked()==null){
                admin.setUnLocked(true);
            }
            //执行保存
            result=adminDao.save(admin);
        }
        return result;
    }


    /**
     * 判断几个相同的账户名
     * @param username
     * @return  true表示重名
     */
    public boolean existsUsername(String username){
        boolean result=false;//默认不重名
        if (adminDao.countByUsername(username)>0){//如果返回的值大于0，表示重名
            result=true;
        }
        return  result;
    }


    /**
     *根据id在数据库读取指定账户的所有信息
     * @param id
     * @return
     */
    public Admin getAdminById(Integer id){
        Admin admin = null;//表示默认找不到记录，即null
        if (id!=null){
            admin=adminDao.getById(id);
        }
        return admin;
    }


    /**
     * 编辑账户
     * @param admin  账户对象  要添加的表单应该都赋值到这个对象
     * @return  编辑成功的记录数量
     */
    public int updateAdmin(Admin admin){
        int result=0;//默认删除0条
        if (admin!=null){
            result=adminDao.update(admin);
        }
        return result;
    }



    /**
     * 判断是否重名，用于账户编辑
     * @param username
     * @return  true表示重名
     */
    public boolean existsByUsernameAndNotId(String username,Integer id){
        boolean result=false;//默认不重名
        if (adminDao.countByUsernameAndNotId(username,id)>0){//如果返回的值大于0，表示重名
            result=true;
        }
        return  result;
    }

    public int deleteAdmins(Integer[] ids,Admin operator){
        for (Integer id:ids){
            if (operator.getId()==id.intValue()){
                throw new MyServiceException("删除失败，不可以删除自己哦");
            }
        }
        return adminDao.deletes(ids);
    }


}
